﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using AdminCondominio.Dominio;
using AdminCondominio.Persistencia;

namespace AdminCondominio.Negocio
{
    public class ViviendaService
    {
        
        public ViviendaDAO viviendaDAO { get; set; }
        public ResidenteDAO ResidenteDAO { get; set; }
       


        public Vivienda RegistrarVivienda(Vivienda data)
        {
           
            Residente residente = ResidenteDAO.obtenerX_Codigo(data.Residente.CoResidente);
            if (residente == null)
                throw new Exception("Residente no Existe");
             if (String.Empty.Equals(data.Ubicacion) || data.Ubicacion.Length==0)
                 throw new Exception("Ubicación de la Vivienda es Null");
             if ( data.NuVivienda==0 )
                 throw new Exception("Número de vivienda No Valida");
             if (String.Empty.Equals(data.TxMetraje) )
                  throw new Exception("Campo Metraje esta en blanco");
             if (String.Empty.Equals(data.TiVivienda) || data.TiVivienda.Length == 0)
                 throw new Exception("Campo Tipo de vivienda esta en blanco");
             Vivienda numVivienda = viviendaDAO.ObtenerNumVivienda(data.NuVivienda);
             if (numVivienda != null)
                 throw new Exception("El Número de Vivienda ya tiene propietario " + data.NuVivienda);


            return viviendaDAO.InsertVivienda1(data);
            
        }


        public Vivienda ModificarVivienda(Vivienda data){

            Vivienda vivienda = viviendaDAO.ObtenerVivienda(data.CoVivienda);
            if (vivienda==null){
                throw new Exception("Error..! Codigo de vivienda no existe");
            }
            Residente residente = ResidenteDAO.obtenerX_Codigo(data.Residente.CoResidente);
            if (residente == null)
                throw new Exception("Residente no Existe");
            if (String.Empty.Equals(data.Ubicacion) || data.Ubicacion.Length == 0)
                throw new Exception("Ubicación de la Vivienda es Null");
            if (data.NuVivienda == 0)
                throw new Exception("Campo Número de Vivieda no valido");
            Vivienda numVivienda = viviendaDAO.ObtenerNumVivienda(data.NuVivienda);
            if (numVivienda != null)
                throw new Exception("El Número de Vivienda ya tiene propietario " + data.NuVivienda);
            if (String.Empty.Equals(data.TxMetraje))
                throw new Exception("Campo Metraje esta en blanco");
            if (String.Empty.Equals(data.TiVivienda) || data.TiVivienda.Length == 0)
                throw new Exception("Campo Tipo de vivienda esta en blanco");

            return viviendaDAO.ModificarVivienda(data);
        }

       
        public ICollection<Vivienda> ListarVivienda(String NumDocumento)
        {
            Residente existeResidente=ResidenteDAO.obtener(NumDocumento);
            if (existeResidente==null)
                throw new Exception("Residente con Num.Doc"+NumDocumento + "no existe");
            if (String.Empty.Equals(NumDocumento))
                throw new Exception("Campo Número de Documento no es valido");
           
            return viviendaDAO.ListarVivienda(NumDocumento);
            
        }


        public ICollection<Vivienda> ListarViviendaTodos()
        {
            return viviendaDAO.ListarViviendaTodo();

        }


        public Vivienda ObtenerVivienda(int codigo)
        {
            Vivienda existeVivienda = viviendaDAO.ObtenerVivienda(codigo);
            if(existeVivienda==null || codigo==0)
                throw new Exception("Código de Vivienda ingresado no existe");

            return viviendaDAO.ObtenerVivienda(codigo);

        }

        public Vivienda ObtenerNumVivienda(int numVivienda)
            {
                Vivienda existeNumVivienda = viviendaDAO.ObtenerNumVivienda(numVivienda);
                if (existeNumVivienda != null)
                throw new Exception("El Número de Vivienda ya tiene propietario " + numVivienda);

            return viviendaDAO.ObtenerNumVivienda(numVivienda);
            }
        
    }
}